A Veces es necesario utilizar variables categóricas en métodos analı́ticos que solo permiten el ingreso de variables numéricas,por lo que a veces es necesario crear variables indicadoras. Con el paquete dummies podemos hacer estas conversiones.
library(dummies)## Warning: package 'dummies' was built under R version 3.5.2
library(kableExtra)
base <- read.csv("../bases de datos/data-conversion.csv")
kable(head(base),format = "markdown")| Age | State | Gender | Height | Income |
|---|---|---|---|---|
| 23 | NJ | F | 61 | 5000 |
| 13 | NY | M | 55 | 1000 |
| 36 | NJ | M | 66 | 3000 |
| 31 | VA | F | 64 | 4000 |
| 58 | NY | F | 70 | 30000 |
| 29 | TX | F | 63 | 10000 |
base.dummy <- dummy.data.frame(base)
kable(head(base.dummy),format = "markdown")| Age | StateNJ | StateNY | StateTX | StateVA | GenderF | GenderM | Height | Income |
|---|---|---|---|---|---|---|---|---|
| 23 | 1 | 0 | 0 | 0 | 1 | 0 | 61 | 5000 |
| 13 | 0 | 1 | 0 | 0 | 0 | 1 | 55 | 1000 |
| 36 | 1 | 0 | 0 | 0 | 0 | 1 | 66 | 3000 |
| 31 | 0 | 0 | 0 | 1 | 1 | 0 | 64 | 4000 |
| 58 | 0 | 1 | 0 | 0 | 1 | 0 | 70 | 30000 |
| 29 | 0 | 0 | 1 | 0 | 1 | 0 | 63 | 10000 |
base.dummy <- dummy.data.frame(base, names = "Gender")
kable(head(base.dummy),format = "markdown")| Age | State | GenderF | GenderM | Height | Income |
|---|---|---|---|---|---|
| 23 | NJ | 1 | 0 | 61 | 5000 |
| 13 | NY | 0 | 1 | 55 | 1000 |
| 36 | NJ | 0 | 1 | 66 | 3000 |
| 31 | VA | 1 | 0 | 64 | 4000 |
| 58 | NY | 1 | 0 | 70 | 30000 |
| 29 | TX | 1 | 0 | 63 | 10000 |
Para entender la necesidad de escalar variables analizaremos la siguiente base de datos
kable(head(base)) %>% column_spec(5,background = "pink") %>% row_spec(c(2,5),background = "yellow") %>% kable_styling(full_width = T)| Age | State | Gender | Height | Income |
|---|---|---|---|---|
| 23 | NJ | F | 61 | 5000 |
| 13 | NY | M | 55 | 1000 |
| 36 | NJ | M | 66 | 3000 |
| 31 | VA | F | 64 | 4000 |
| 58 | NY | F | 70 | 30000 |
| 29 | TX | F | 63 | 10000 |
Se puede observar que aunque las cuadrículas pintadas en amarillo pertenecen a la misma variable (Income) la diferencia en valor numérico es bastante grande, lo que puede dificultar la implementación de técnicas de Machine Learning. En R cuando queremos escalar las variables hacemos los siguientes procedimientos.
library(scales)
#Ahora reescalamos un variable de la base de datos
kable(rescale(base$Income))| x |
|---|
| 0.0740741 |
| 0.0000000 |
| 0.0370370 |
| 0.0555556 |
| 0.5370370 |
| 0.1666667 |
| 0.9074074 |
| 1.0000000 |
| 0.0185185 |
| 0.3518519 |
Por defecto la función rescale me realiza un escalado de la variables en un rango [0,1] ya que aplica el siguiente método para escalar
\[x.escalada = \frac{x-min(x)}{max(x)-min(x)}\]
Si queremos modificar la escala modelos hacer lo siguiente
kable(rescale(base$Income,to=c(1,10)))| x |
|---|
| 1.666667 |
| 1.000000 |
| 1.333333 |
| 1.500000 |
| 5.833333 |
| 2.500000 |
| 9.166667 |
| 10.000000 |
| 1.166667 |
| 4.166667 |
la normalización significa ajustar los valores medidos en diferentes escalas respecto a una escala común, a menudo previo a un proceso de realizar promedios. En R se pueden escalar las variables de una base de datos por medio de el siguiente procedimiento.
base.escalada<- scale(base[,c(4,5)],center=T,scale=T)
kable(head(base.escalada),format = "markdown")| Height | Income |
|---|---|
| -0.7218398 | -0.6377182 |
| -2.0342757 | -0.8339392 |
| 0.3718568 | -0.7358287 |
| -0.0656218 | -0.6867734 |
| 1.2468141 | 0.5886629 |
| -0.2843611 | -0.3924420 |